7.2 Switch Configuration and Composition
7.2.1 CXL 交换机初始化选项
CXL交换机可以使用三种不同的方法进行初始化,分别是:
- 静态初始化 (Static Initialization)
- Fabric Manager (FM) 和主机同时启动
静态初始化 (Static Initialization)
图中展示了一个静态初始化的 CXL 交换机,它带有 2 个 VCS。在这个例子中,下游的 vPPB 被静态绑定到端口,并且在启动时对主机可用。支持使用标准的 PCIe 机制来对设备进行托管式的热插拔。 核心理念:
- 交换机的配置是预先定义好并且固定的。在交换机启动时,所有的虚拟CXL交换机 (VCSs) 和下行端口的绑定关系都是通过厂商定义的机制(例如,从一个 SPI Flash 芯片中加载配置文件)静态配置好的。
特点与限制:
- 无需 Fabric Manager (FM):这种模式完全不需要 FM 的参与。
- 行为类似 PCIe 交换机:VCS 的行为和功能与一个标准的 PCIe 交换机非常相似,只是额外增加了对 CXL 协议的支持。
- 主机即时可用:当主机系统启动时,每个 VCS 都已经配置完毕,可以立即被主机发现和枚举。
- 不支持动态配置:不支持多逻辑设备 (MLD) 端口,也不支持在运行时将端口重新绑定到不同的 VCS。
- 支持热插拔:支持通过标准的 PCIe 机制对设备进行管理型热添加 (managed hot-add) 和热移除。
Fabric Manager (FM) 优先启动
启动流程:
- FM 启动,主机复位:FM 首先启动,而主机则被保持在复位状态。
- 端口链路建立:交换机所有连接的下行端口 (DSPs) 建立链路,并初始绑定到由 FM 所拥有的物理 PCI-to-PCI 桥 (PPBs) 上。
- FM 执行绑定:FM 通过其管理接口向交换机发送绑定命令(例如
BIND (VCSO, VPPB1, PHY_PORT_ID1)
),指示交换机将一个指定的物理端口绑定到一个特定 VCS 中的虚拟 PPB (vPPB) 上。
- 交换机完成映射:交换机执行从虚拟到物理的绑定,将 vPPB 的虚拟端口号映射到物理端口号 ,并将 vPPB 的所有功能(如链路控制)直接映射到该物理端口上。此时,原先由 FM 拥有的 PPB 对于该端口来说就不存在了。
- 主机启动:当主机被解除复位并启动时,交换机已经完全配置好,主机可以正常进行设备枚举。
Fabric Manager (FM) 和主机同时启动

- 核心理念:主机先发现一个“空的”虚拟交换机结构,然后由 FM 在后台进行设备发现和绑定,并通过热添加的方式通知主机。
- 启动流程:
- 静态定义 VCS:交换机内的 VCS 结构是静态定义好的。
- vPPB 初始为未绑定:每个 VCS 内的下行 vPPB 初始时都是未绑定的,并向主机呈现为“链路关闭 (Link Down)”的状态。
- 主机和 FM 同时工作:主机启动后会枚举到这个虚拟层次结构 (VH)。同时,交换机发现其下行端口连接的设备,并将这些设备信息呈现给 FM。
- FM 执行绑定:FM 根据策略,执行将物理端口(设备)绑定到 vPPB 的操作。
- 热添加通知:每当一个端口成功绑定,交换机就会向对应的主机发送一个热添加 (hot-add) 的通知,主机就像发现一个新插入的设备一样去配置和使用它。
7.2.3 绑定和解绑 (Binding and Unbinding)
这部分是 CXL 交换机实现动态资源分配的核心机制。它描述了如何将一个物理端口(及其连接的设备)与一个虚拟层次结构中的 vPPB 关联(绑定)或分离(解绑)的过程。这个过程根据设备是单一逻辑设备 (SLD) 还是多逻辑设备 (MLD) 而有所不同。
- 单一逻辑设备端口的绑定与解绑 (Binding and Unbinding of a Single Logical Device Port)
一个 SLD 端口一次只能绑定到一个 VCS。它可以连接 PCIe 设备或 CXL Type 1, 2, 3 型的 SLD 设备。
- 绑定 (Binding):
- 未绑定状态: 当一个 vPPB 未绑定到任何物理端口时,它对主机来说就像一个处于“链路关闭”(Link Down) 且无设备存在 (No Presence Detect) 的状态。
- 绑定过程: 如果需要重新绑定,必须有一个 Fabric Manager (FM)。FM 可以发出命令,将一个未使用的物理端口绑定到一个未绑定的 vPPB 上。绑定后,vPPB 的所有端口设置都会应用到该物理端口。对于主机而言,这个过程看起来就像一个设备被热添加到系统中。
- 解绑 (Unbinding):
- 解绑过程: FM 向交换机发送一个针对特定 vPPB 的解绑命令。
- 交换机动作: 交换机收到命令后,会对该物理端口置位“链路禁用”(Link Disable),使链路断开。
- 端口归属: 解绑后,该物理端口变为“FM 拥有的”(FM-owned),并由该物理端口的 PPB 设置来控制。
- 准备重绑: FM 可以通过其 API 对这个由它拥有的端口进行 CXL.io 访问,例如触发功能级复位 (FLR) 或 CXL 复位,为下一次绑定做准备。
流程示意 (参考图 7-9 至 7-11):

- 初始状态:VCS 0 的 vPPB 2 绑定到某个物理端口。
- FM 发出解绑命令给 VCS 0 的 vPPB 2。
- 该物理端口变为未绑定状态,由 FM 拥有的 PPB 控制。
- FM 可以再发出绑定命令,将这个空闲的物理端口绑定到另一个虚拟交换机(例如 VCS 1 的 vPPB 1)。
- 绑定成功后,交换机会向 Host 1 发送一个热添加通知。
- 池化设备 (MLD) 的绑定与解绑 (Binding and Unbinding of a Pooled Device)
池化设备(即 MLD)在一个物理端口上包含多个逻辑设备 (LDs),因此其流量可以与多个分属于不同 VCS 的 vPPB 相关联。其绑定和解绑过程与 SLD 类似,但有几个关键区别:
- 不影响物理链路: 绑定或解绑 MLD 中的某个 LD 绝不能影响物理链路本身(例如,不能使用 PERST# 复位、热复位或禁用链路),也必须不影响其他 VCS 的流量。
- 物理 PPB 始终由 FM 拥有: MLD 端口的物理 PPB 始终归 FM 所有。FM 负责该物理端口的链路控制、错误处理等。
- 由 FM 管理设备: FM 可能需要管理池化设备以更改内存分配、启用 LD 等。
流程示意 (参考图 7-12 至 7-14): 
- 初始状态: MLD 设备连接到交换机,交换机在链路建立后通知 FM 这是一个 Type 3 池化设备。此时 MLD 中的各个 LD (如 LD 0, LD 1) 处于未绑定状态。

- 配置并绑定第一个 LD: FM 通过其 API 配置池化设备中的 LD 1(例如设置内存分配)。然后,FM 发送绑定命令,将 VCS 0 中未绑定的 vPPB 2 与该池化设备的 LD 1 进行绑定。
- 交换机设置路由: 交换机执行虚拟到物理的转换,确保所有目标为 VCS 0 的 vPPB 2 的 CXL.io 和 CXL.mem 流量都被路由到 MLD 端口,并附上 LD-ID=1。
- 热添加通知: 绑定后,该 vPPB 会像 SLD 绑定一样,向 VCS 0 的主机通知一个热添加事件。

- 绑定第二个 LD 到不同主机: 同样地,FM 可以配置 LD 0,并将其绑定到另一个虚拟交换机,例如 VCS 1 中的 vPPB 1。这样,同一个 MLD 设备的不同逻辑部分(内存)就可以同时被 Host 0 和 Host 1 访问。
7.2.4 PPB and vPPB Behavior for MLD Ports
- 核心思想是:一个 MLD 端口是一个共享的物理接口,多个 vPPB(代表不同的主机或虚拟层次)可以同时通过这个共享接口访问 MLD 中的不同逻辑设备 (LDs) 。因此,必须对控制进行区分:
- 物理层控制必须统一:所有与物理链路直接相关的操作(如链路速度、复位、链路训练等)必须由一个统一的实体来管理,不能由某个主机单独控制。
- 逻辑层控制可以虚拟化:每个主机(通过其 vPPB)应该能独立控制与自己相关的逻辑功能(如错误报告的屏蔽、总线主控使能等)。
- 为了实现这一点,CXL 定义了两种不同的角色,这些角色在后续的表格 (7-2 到 7-11) 中作为两列进行对比:
- FM-owned PPB (由 FM 拥有的 PPB):这代表了控制真实物理端口的那个唯一的、物理的 PPB 。它由 Fabric Manager (FM) 管理,负责所有物理链路层面的控制、配置和错误处理 。
- All Other vPPBs / All vPPBs Bound to the MLD Port (所有其他/绑定到 MLD 端口的 vPPB):这些是暴露给各个主机的虚拟 PPB 。每个主机看到并配置的是自己的 vPPB,但这些 vPPB 无法直接控制共享的物理链路。